package com.yungu.swift.system.marketing.model.dto;

import com.yungu.swift.base.model.BaseDto;
import com.yungu.swift.base.model.annotation.AbsoluteImgPath;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;

public class MarketingGiftDto extends BaseDto {

    /**
     * 1.注册。2.乘客邀请。3.司机邀请。4.二维码/微信链接。5.自动指定人群。6.一次性发放 7.兑换码口令
     */
    public static final int GIFT_REGISTER = 1;
    public static final int GIFT_PASSENGER_INVITE = 2;
    public static final int GIFT_DRIVER_INVITE = 3;
    public static final int GIFT_QR_CODE = 4;
    public static final int GIFT_AUTO_APPOINT = 5;
    public static final int GIFT_ONCE_SEND = 6;
    public static final int GIFT_REDEEM_CODE = 7;

    /**
     * 礼包名称
     **/
    private String name;
    /**
     * 礼包类型（1.注册。2.乘客邀请。3.司机邀请。4.二维码/微信链接。5.自动指定人群。6.一次性发放 7.兑换码口令）
     **/
    private Integer type;
    /**
     * 礼包子类型（1、司机邀请乘客。2、司机邀请司机。）
     **/
    private Integer subType;
    /**
     * 发送量
     **/
    private Integer sendCount;
    /**
     * 发送时间
     **/
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date sendDate;
    /**
     * 代理商uuid
     **/
    private String agentUuid;
    /**
     * 公司uuid
     **/
    private String companyUuid;

    /**
     * 礼包状态：1.开启。0.关闭。
     **/
    private Integer status;
    /**
     * 总数量
     **/
    private Integer totalNumber;
    /**
     * 剩余数量
     **/
    private Integer remainNumber;
    /**
     * 礼包获得方式：1、成功完成第一个订单后。2、成功注册后  ps:需要与对应的type对应
     **/
    private Integer getMode;
    /**
     * 司机返现金额
     **/
    private BigDecimal driverCashback;
    /**
     * 限制领取次数
     **/
    private Integer limitDrawCount;
    /**
     * 有效期结束日期
     **/
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date expiryDate;
    /**
     * 背景图片
     **/
    @AbsoluteImgPath
    private String backgroundImage;
    /**
     * 领取按钮图片
     **/
    @AbsoluteImgPath
    private String buttonImage;
    /**
     * 规则说明
     **/
    private String ruleDescription;
    /**
     * 领取礼包的页面地址
     **/
    private String drawUrl;
    /**
     * 有效期开始日期
     **/
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date effectiveDate;
    /**
     * 领取用户限制0不限（新用户和老用户都可领取）,1仅限新用户,2仅限老用户
     */
    private Integer limitDrawType;
    /**
     * 码类型
     */
    private Integer codeType;
    /**
     * 创建方式
     */
    private Integer createCodeType;
    /**
     * 口令
     */
    private String passwordsCode;
    /**
     * 限制叫单分钟数（分钟）
     */
    private Integer limitTime;
    /**
     * 限制叫单数
     */
    private Integer limitCount;
    /**
     * 限制叫单等待时长（秒）
     */
    private Integer limitWait;

    /**
     * (自动指定人群-唤醒沉睡用户) 距离上次叫车后，未使用天数
     */
    private Integer unusedDays;

    /**
     * (自动指定人群-激励高频用户) 高频天数
     */
    private Integer highFrequencyDays;

    /**
     * (自动指定人群-激励高频用户) 高频次数
     */
    private Integer highFrequencyNum;
    /**
     * 新发放城市字段，发放时根据这个字段搜索符合条件乘客
     */
    private String sendCity;
    /**
     * 新发放城市字段，发放时根据这个字段搜索符合条件乘客
     */
    private String sendCityName;
    /**
     * 邀请者奖励方式
     */
    private Integer inviteRewardMethod;
    /**
     * 被邀请者奖励方式
     */
    private Integer invitedRewardMethod;
    /**
     * 被邀请者礼包名称
     */
    private String invitedGiftName;

    // 非数据库字段
    /**
     * 礼包内的优惠券数量
     */
    private Integer couponCount;

    /**
     * 优惠券总金额
     */
    private Double highestMoney;

    public static int getGiftRegister() {
        return GIFT_REGISTER;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Integer getSubType() {
        return subType;
    }

    public void setSubType(Integer subType) {
        this.subType = subType;
    }

    public Integer getSendCount() {
        return sendCount;
    }

    public void setSendCount(Integer sendCount) {
        this.sendCount = sendCount;
    }

    public Date getSendDate() {
        return sendDate;
    }

    public void setSendDate(Date sendDate) {
        this.sendDate = sendDate;
    }

    public String getAgentUuid() {
        return agentUuid;
    }

    public void setAgentUuid(String agentUuid) {
        this.agentUuid = agentUuid;
    }

    public String getCompanyUuid() {
        return companyUuid;
    }

    public void setCompanyUuid(String companyUuid) {
        this.companyUuid = companyUuid;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getTotalNumber() {
        return totalNumber;
    }

    public void setTotalNumber(Integer totalNumber) {
        this.totalNumber = totalNumber;
    }

    public Integer getRemainNumber() {
        return remainNumber;
    }

    public void setRemainNumber(Integer remainNumber) {
        this.remainNumber = remainNumber;
    }

    public Integer getGetMode() {
        return getMode;
    }

    public void setGetMode(Integer getMode) {
        this.getMode = getMode;
    }

    public BigDecimal getDriverCashback() {
        return driverCashback;
    }

    public void setDriverCashback(BigDecimal driverCashback) {
        this.driverCashback = driverCashback;
    }

    public Integer getLimitDrawCount() {
        return limitDrawCount;
    }

    public void setLimitDrawCount(Integer limitDrawCount) {
        this.limitDrawCount = limitDrawCount;
    }

    public Date getExpiryDate() {
        return expiryDate;
    }

    public void setExpiryDate(Date expiryDate) {
        this.expiryDate = expiryDate;
    }

    public String getBackgroundImage() {
        return backgroundImage;
    }

    public void setBackgroundImage(String backgroundImage) {
        this.backgroundImage = backgroundImage;
    }

    public String getButtonImage() {
        return buttonImage;
    }

    public void setButtonImage(String buttonImage) {
        this.buttonImage = buttonImage;
    }

    public String getRuleDescription() {
        return ruleDescription;
    }

    public void setRuleDescription(String ruleDescription) {
        this.ruleDescription = ruleDescription;
    }

    public String getDrawUrl() {
        return drawUrl;
    }

    public void setDrawUrl(String drawUrl) {
        this.drawUrl = drawUrl;
    }

    public Date getEffectiveDate() {
        return effectiveDate;
    }

    public void setEffectiveDate(Date effectiveDate) {
        this.effectiveDate = effectiveDate;
    }

    public Integer getLimitDrawType() {
        return limitDrawType;
    }

    public void setLimitDrawType(Integer limitDrawType) {
        this.limitDrawType = limitDrawType;
    }

    public Integer getCodeType() {
        return codeType;
    }

    public void setCodeType(Integer codeType) {
        this.codeType = codeType;
    }

    public Integer getCreateCodeType() {
        return createCodeType;
    }

    public void setCreateCodeType(Integer createCodeType) {
        this.createCodeType = createCodeType;
    }

    public String getPasswordsCode() {
        return passwordsCode;
    }

    public void setPasswordsCode(String passwordsCode) {
        this.passwordsCode = passwordsCode;
    }

    public Integer getLimitTime() {
        return limitTime;
    }

    public void setLimitTime(Integer limitTime) {
        this.limitTime = limitTime;
    }

    public Integer getLimitCount() {
        return limitCount;
    }

    public void setLimitCount(Integer limitCount) {
        this.limitCount = limitCount;
    }

    public Integer getLimitWait() {
        return limitWait;
    }

    public void setLimitWait(Integer limitWait) {
        this.limitWait = limitWait;
    }

    public Integer getUnusedDays() {
        return unusedDays;
    }

    public void setUnusedDays(Integer unusedDays) {
        this.unusedDays = unusedDays;
    }

    public Integer getHighFrequencyDays() {
        return highFrequencyDays;
    }

    public void setHighFrequencyDays(Integer highFrequencyDays) {
        this.highFrequencyDays = highFrequencyDays;
    }

    public Integer getHighFrequencyNum() {
        return highFrequencyNum;
    }

    public void setHighFrequencyNum(Integer highFrequencyNum) {
        this.highFrequencyNum = highFrequencyNum;
    }

    public String getSendCity() {
        return sendCity;
    }

    public void setSendCity(String sendCity) {
        this.sendCity = sendCity;
    }

    public String getSendCityName() {
        return sendCityName;
    }

    public void setSendCityName(String sendCityName) {
        this.sendCityName = sendCityName;
    }

    public Integer getInviteRewardMethod() {
        return inviteRewardMethod;
    }

    public void setInviteRewardMethod(Integer inviteRewardMethod) {
        this.inviteRewardMethod = inviteRewardMethod;
    }

    public Integer getInvitedRewardMethod() {
        return invitedRewardMethod;
    }

    public void setInvitedRewardMethod(Integer invitedRewardMethod) {
        this.invitedRewardMethod = invitedRewardMethod;
    }

    public String getInvitedGiftName() {
        return invitedGiftName;
    }

    public void setInvitedGiftName(String invitedGiftName) {
        this.invitedGiftName = invitedGiftName;
    }

    public Integer getCouponCount() {
        return couponCount;
    }

    public void setCouponCount(Integer couponCount) {
        this.couponCount = couponCount;
    }

    public Double getHighestMoney() {
        return highestMoney;
    }

    public void setHighestMoney(Double highestMoney) {
        this.highestMoney = highestMoney;
    }
}